home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / PowerPlant / TCodeModule & Friends / CodeModuleUtils.cp next >
Text File  |  1996-05-28  |  2KB  |  89 lines

  1. /*
  2.     File:        CodeModuleUtils.cp
  3.     
  4.     Contains:    Utilities for use with LCodeModule.
  5.  
  6.     Copyright:    ©1995 Chris K. Thomas.  All Rights Reserved.
  7.     
  8.     Version:    1.0
  9.     
  10.     History:    ckt August 10, 1995 created.
  11.                 ckt May        1, 1996 total rewrite.
  12.     
  13.     Requires PowerPlant array classes and MoreFiles.
  14. */
  15.  
  16. #include <LArray.h>
  17. #include "IterateDirectory.h"
  18. #include "TCodeModule.h"
  19.  
  20. #include "CodeModuleUtils.h"
  21.  
  22.  
  23. //
  24. // static methods
  25. //
  26.  
  27. static pascal void CodeModuleIterator (const CInfoPBRec * const cpbPtr,
  28.                                               Boolean *quitFlag,
  29.                                               LArray *ourArray);
  30.  
  31. static OSType    sFileType = 0L;
  32.  
  33. //
  34. // * load code modules into a preallocated array
  35. //
  36. OSStatus LoadCodeModulesFromFolder(OSType inFileType, FSSpec *inFolder, LArray &outModuleArray)
  37. {
  38.     OSStatus        theErr = 0;
  39.     
  40.     sFileType = inFileType;
  41.     
  42.     //
  43.     // clear existing list if necessary
  44.     //
  45.     if(outModuleArray.GetCount() > 0)
  46.         outModuleArray.RemoveItemsAt(outModuleArray.GetCount(), 1);
  47.     
  48.     //
  49.     // get all potential code modules
  50.     //
  51.     
  52.     theErr = FSpIterateDirectory(inFolder, 0, (IterateFilterProcPtr) &CodeModuleIterator, &outModuleArray);
  53.     return theErr;    
  54. }
  55.  
  56.  
  57. //
  58. // actual work is done here
  59. //
  60. static pascal void CodeModuleIterator (const CInfoPBRec * const cpbPtr,
  61.                                               Boolean */*quitFlag*/,
  62.                                               LArray *ourArray)
  63. {
  64.     //
  65.     // if it’s a directory, we don’t care
  66.     //
  67.  
  68.     if(((cpbPtr->hFileInfo.ioFlAttrib & ioDirMask) == 0)
  69.         && (cpbPtr->hFileInfo.ioFlFndrInfo.fdType == sFileType))
  70.     {
  71.         FSSpec            theSpec;
  72.         OSStatus        theErr = 0L;
  73.         TCodeModule        *currentModule;
  74.         
  75.         theErr = FSMakeFSSpec(cpbPtr->hFileInfo.ioVRefNum, cpbPtr->hFileInfo.ioDirID,
  76.                                 cpbPtr->hFileInfo.ioNamePtr, &theSpec);
  77.         
  78.         //
  79.         // if we got a module add it to our array
  80.         //
  81.         
  82.         if(theErr == 0L)
  83.         {
  84.             currentModule = new TCodeModule(theSpec);
  85.             ourArray->InsertItemsAt(1, ourArray->GetCount() + 1, ¤tModule);
  86.         }
  87.     }
  88. }
  89.